package com.ruoyi.system.service;

import com.ruoyi.system.domain.SysDataLineage;
import java.util.List;
import java.util.Map;

/**
 * 血缘关系Service接口
 * 
 * @author ruoyi
 */
public interface ISysDataLineageService
{
    /**
     * 查询血缘关系
     * 
     * @param lineageId 血缘关系ID
     * @return 血缘关系
     */
    public SysDataLineage selectSysDataLineageById(Long lineageId);

    /**
     * 查询资产的血缘图谱数据
     * @param assetId 资产ID
     * @param depth 查询深度
     * @return 图谱数据
     */
    public Map<String, Object> getLineageGraph(Long assetId, int depth);

    /**
     * 查询上游血缘
     * @param targetAssetId 下游资产ID
     * @return 血缘列表
     */
    public List<SysDataLineage> selectUpstreamLineage(Long targetAssetId);

    /**
     * 查询下游血缘
     * @param sourceAssetId 上游资产ID
     * @return 血缘列表
     */
    public List<SysDataLineage> selectDownstreamLineage(Long sourceAssetId);

    /**
     * 查询血缘关系列表
     * 
     * @param sysDataLineage 血缘关系
     * @return 血缘关系集合
     */
    public List<SysDataLineage> selectSysDataLineageList(SysDataLineage sysDataLineage);

    /**
     * 保存表到表的血缘关系
     * @param sourceTableName 源表名
     * @param targetTableName 目标表名
     * @param relationType 关系类型
     * @param operationId 操作ID
     */
    public void saveTableLineage(String sourceTableName, String targetTableName, String relationType, Long operationId);

    /**
     * 新增血缘关系
     * 
     * @param sysDataLineage 血缘关系
     * @return 结果
     */
    public int insertSysDataLineage(SysDataLineage sysDataLineage);

    /**
     * 修改血缘关系
     * 
     * @param sysDataLineage 血缘关系
     * @return 结果
     */
    public int updateSysDataLineage(SysDataLineage sysDataLineage);

    /**
     * 批量删除血缘关系
     * 
     * @param lineageIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteSysDataLineageByIds(Long[] lineageIds);

    /**
     * 删除血缘关系信息
     * 
     * @param lineageId 血缘关系ID
     * @return 结果
     */
    public int deleteSysDataLineageById(Long lineageId);
}
